#!/bin/bash

print_usage() {
  cat <<EOF
用法: $(basename "$0") [选项]

选项:
  -y, --yes               非交互模式，默认确认所有安装提示
  --repo N                指定安装源 (1 内部镜像, 2 Eulermaker/Oemaker, 3 自定义)
  --custom-release URL    自定义 release baseurl（与 --repo 3 一起使用）
  --custom-3party URL     自定义 3-party baseurl（可选）
  --pip-url URL           指定要安装的 pip 包 URL（默认内部 agirosdep）
  --package NAME          指定要安装的 yum 包（默认 agiros-loong-ros-base）
  -h, --help              显示此帮助并退出

示例:
  非交互并使用内部镜像、自动确认:
    sudo $(basename "$0") -y --repo 1

  非交互使用自定义源:
    sudo $(basename "$0") -y --repo 3 --custom-release "http://example.com/\$basearch/release" --custom-3party "http://example.com/\$basearch/3-party"
EOF
}

# 默认值
AUTO_YES=0
REPO_CHOICE=""
CUSTOM_RELEASE=""
CUSTOM_3PARTY=""
PIP_URL="http://1.94.193.239/yumrepo/agiros/agirosdep/agirosdep-0.25.1-py3-none-any.whl"
PACKAGE_NAME="agiros-loong-ros-base"

# 解析参数（支持 --opt=value 和 --opt value 两种形式）
while [[ $# -gt 0 ]]; do
  case "$1" in
    -y|--yes|--auto)
      AUTO_YES=1
      shift
      ;;
    --repo)
      REPO_CHOICE="$2"
      shift 2
      ;;
    --repo=*)
      REPO_CHOICE="${1#*=}"
      shift
      ;;
    --custom-release)
      CUSTOM_RELEASE="$2"
      shift 2
      ;;
    --custom-release=*)
      CUSTOM_RELEASE="${1#*=}"
      shift
      ;;
    --custom-3party)
      CUSTOM_3PARTY="$2"
      shift 2
      ;;
    --custom-3party=*)
      CUSTOM_3PARTY="${1#*=}"
      shift
      ;;
    --pip-url)
      PIP_URL="$2"
      shift 2
      ;;
    --pip-url=*)
      PIP_URL="${1#*=}"
      shift
      ;;
    --package)
      PACKAGE_NAME="$2"
      shift 2
      ;;
    --package=*)
      PACKAGE_NAME="${1#*=}"
      shift
      ;;
    -h|--help)
      print_usage
      exit 0
      ;;
    *)
      echo "未知参数: $1"
      print_usage
      exit 1
      ;;
  esac
done

# 检查是否以 root 运行
if [ "$EUID" -ne 0 ]; then
  echo "请以 root 用户运行此脚本（例如使用 sudo）"
  exit 1
fi

# 交互/确认辅助函数
confirm_yes_or_no() {
  local prompt="$1"
  if [ "$AUTO_YES" -eq 1 ]; then
    return 0
  fi
  echo ""
  echo -n "$prompt (y/Y/yes/YES 确认, 其他跳过): "
  read -r user_input
  user_input_lower=$(echo "$user_input" | tr '[:upper:]' '[:lower:]')
  if [[ "$user_input_lower" == "y" || "$user_input_lower" == "yes" ]]; then
    return 0
  fi
  return 1
}

# 安装指定包的函数
install_package() {
    local package_name=$1

    if confirm_yes_or_no "是否要安装 $package_name 包？"; then
        echo "开始安装 $package_name..."
        yum install -y "$package_name"
        if [ $? -eq 0 ]; then
            echo "$package_name 安装成功"
        else
            echo "$package_name 安装失败"
            exit 1
        fi
    else
        echo "跳过安装 $package_name"
    fi
}

# 安装pip包的函数
install_pip_package() {
    local package_url=$1
    if [ -z "$package_url" ]; then
        echo "未提供 pip 包 URL，跳过 pip 安装"
        return
    fi
    local package_name=$(basename "$package_url" | cut -d'-' -f1)

    if confirm_yes_or_no "是否要安装 pip 包 $package_name？"; then
        if ! command -v pip3 &> /dev/null; then
            echo "未检测到 pip3，开始安装 python3-pip..."
            yum install -y python3-pip
            if [ $? -ne 0 ]; then
                echo "python3-pip 安装失败"
                exit 1
            fi
            echo "python3-pip 安装完成"
        else
            echo "开始安装 pip 包: $package_name..."
        fi

        pip3 install "$package_url"
        if [ $? -eq 0 ]; then
            echo "pip 包 $package_name 安装成功"
        else
            echo "pip 包 $package_name 安装失败"
            exit 1
        fi
    else
        echo "跳过安装 pip 包 $package_name"
    fi
}

# 获取系统版本
VERSION=$(grep -oP 'VERSION_ID="\K\d+' /etc/os-release | cut -c1-4)
AGIROS_VERSION=2506

echo "检测到系统版本: $VERSION"

# 根据系统版本设置相应的变量
if [ "$VERSION" -ge 24 ]; then
  OS_VERSION=2403lts
  echo "发现openEuler 24.03及以上系统"
elif [ "$VERSION" -eq 22 ]; then
  OS_VERSION=2403lts
  echo "发现openEuler 22.03系统，按24.03版本处理"
else
  echo "不支持的openEuler版本: $VERSION"
  exit 1
fi

# 备份已存在的 repo 文件
REPO_FILE="/etc/yum.repos.d/agiros.repo"
if [ -f "$REPO_FILE" ]; then
  backup="${REPO_FILE}.$(date +%s).bak"
  cp "$REPO_FILE" "$backup"
  echo "提示: $REPO_FILE 已存在，已备份到 $backup"
fi

# 如果未通过参数指定 repo，走交互选择
if [ -z "$REPO_CHOICE" ]; then
  echo ""
  echo "请选择要使用的安装源："
  echo "1) 内部镜像 (http://1.94.193.239) - 推荐局域网环境"
  echo "2) Eulermaker / Oemaker 公共仓库 (脚本默认)"
  echo "3) 自定义 baseurl（可输入 release 与 3-party 地址）"
  echo -n "请输入 1/2/3（默认 2）："
  read -r repo_choice
  REPO_CHOICE=${repo_choice:-2}
else
  echo "使用传入的 repo 参数: $REPO_CHOICE"
fi

# 如果选择自定义且未通过参数传入地址，交互获取（非交互模式下报错）
if [ "$REPO_CHOICE" = "3" ]; then
  if [ -z "$CUSTOM_RELEASE" ]; then
    if [ "$AUTO_YES" -eq 1 ]; then
      echo "错误: 非交互模式且未提供 --custom-release，无法继续"
      exit 1
    else
      echo ""
      echo "请输入 release 的 baseurl（示例: http://example.com/path/\$basearch/release）:"
      read -r CUSTOM_RELEASE
    fi
  fi

  if [ -z "$CUSTOM_RELEASE" ]; then
    echo "未输入 release 地址，退出。"
    exit 1
  fi

  if [ -z "$CUSTOM_3PARTY" ] && [ "$AUTO_YES" -eq 0 ]; then
    echo "请输入 3-party 的 baseurl（留空表示不添加 3-party）:"
    read -r CUSTOM_3PARTY
  fi
fi

# 生成 repo 内容
case "$REPO_CHOICE" in
  1)
    cat > "$REPO_FILE" <<EOF
[agiros-loong-release]
name=agiros-loong-release
baseurl=http://1.94.193.239/yumrepo/agiros/openeuler${OS_VERSION}/${AGIROS_VERSION}/\$basearch/release
enabled=1
gpgcheck=0

[agiros-loong-3-party]
name=agiros-loong-3-party
baseurl=http://1.94.193.239/yumrepo/agiros/openeuler${OS_VERSION}/${AGIROS_VERSION}/\$basearch/3-party
enabled=1
gpgcheck=0
EOF
    echo "已生成内部镜像的 repo 文件: $REPO_FILE"
    ;;
  2)
    cat > "$REPO_FILE" <<EOF
[agiros-loong-oemaker-packages]
name=agiros-loong-oemaker-packages
baseurl=https://eulermaker.compass-ci.openeuler.openatom.cn/api/ems1/repositories/AGIROS_2403_250627/openEuler%3A24.03-LTS/\$basearch
enabled=1
gpgcheck=0

[oemaker-the-third-packages]
name=oemaker-the-third-packages
baseurl=https://eulermaker.compass-ci.openeuler.openatom.cn/api/ems1/repositories/the-third-packages/openEuler%3A24.03-LTS/\$basearch
enabled=1
gpgcheck=0
EOF
    echo "已生成 Eulermaker/Oemaker 的 repo 文件: $REPO_FILE"
    ;;
  3)
    cat > "$REPO_FILE" <<EOF
[agiros-custom-release]
name=agiros-custom-release
baseurl=${CUSTOM_RELEASE}
enabled=1
gpgcheck=0
EOF
    if [ -n "$CUSTOM_3PARTY" ]; then
      cat >> "$REPO_FILE" <<EOF

[agiros-custom-3-party]
name=agiros-custom-3-party
baseurl=${CUSTOM_3PARTY}
enabled=1
gpgcheck=0
EOF
    fi
    echo "已生成自定义 repo 文件: $REPO_FILE"
    ;;
  *)
    echo "无效选择: $REPO_CHOICE"
    exit 1
    ;;
esac

echo "repo 文件内容："
cat "$REPO_FILE"

# 更新 yum 缓存
echo "正在更新 yum 缓存..."
yum clean all
yum makecache -y

# 调用函数安装 pip 包（如果提供）
install_pip_package "$PIP_URL"

# 调用函数安装 rpm 包（如果提供）
install_package "$PACKAGE_NAME"

echo "脚本执行完成。"

